﻿using System.Drawing;
using System.Windows.Forms;

namespace SnakeGame {
    // 蛇身
    class SnakeBody {
        // 类型
        public enum Type {
            APPLE,  // 果子
            SNAKE   // 蛇
        }

        public SnakeBody Next { get; set; } // 下一个蛇身
        public Point Position { get; set; } // 位置
        private Brush mBrush;               // 画刷
        private readonly Graphics mDrawer;  // 绘图者

        /**
         * 构造方法。
         * @param drawer    绘图者
         * @param point     位置
         * @param type      类型
         */
        public SnakeBody(Graphics drawer, Point point, Type type) {
            // 初始化成员
            Position = point;
            mDrawer = drawer;

            // 设置类型
            this.SetType(type);

            // 画自身
            this.Draw();
        }

        /**
         * 画自身。
         */
        public void Draw() {
            mDrawer.FillEllipse(mBrush, Position.X * Const.GRID_SIZE,
                Position.Y * Const.GRID_SIZE, Const.GRID_SIZE, Const.GRID_SIZE);
        }

        /**
         * 将蛇身从原来的位置中抹除。
         */
        public void Erase() {
            Rectangle rect = new Rectangle(Position.X * Const.GRID_SIZE, 
                Position.Y * Const.GRID_SIZE, Const.GRID_SIZE, Const.GRID_SIZE);
            mDrawer.FillRectangle(new SolidBrush(Const.GAME_BOARD_COLOR), rect);
        }

        /**
         * 设置蛇身的类型。
         */
        public void SetType(Type type) {
            if (type == Type.SNAKE) {
                mBrush = new SolidBrush(Const.SNAKE_COLOR);
            } else {
                mBrush = new SolidBrush(Const.APPLE_COLOR);
            }
        }
    }
}
